package cn.com.nes.mybatis.agent.ope.entity;

import cn.com.nes.site.entity.em.crm.saleorder.SaleOrderStatusEnum;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 销售订单主表
 */
@Data
@TableName("sale_order_info")
public class SaleOrderInfo {

    /**
     * id - 订单id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 订单名称
     */
    @TableField("sale_order_name")
    private String saleOrderName;

    /**
     * 商机id
     */
    @TableField("business_id")
    private String businessId;

    /**
     * 客户id
     */
    @TableField("customer_id")
    private String customerId;

    /**
     * 联系电话
     */
    @TableField("phone")
    private String phone;

    /**
     * 厂商id
     */
    @TableField("manufacture_id")
    private String manufactureId;

    /**
     * 公司id
     */
    @TableField("company_id")
    private String companyId;

    /**
     * 安装信息id
     */
    @TableField("install_info_id")
    private String installInfoId;

    /**
     * 安装地址
     */
    @TableField("install_address")
    private String installAddress;

    /**
     * 预计安装时间
     */
    @TableField("estimated_install_time")
    private Date estimatedInstallTime;

    /**
     * 订单类型，对应字典表param_type = 303
     */
    @TableField("order_type")
    private Integer orderType;

    /**
     * 订单状态，对应字典表param_type = 302
     */
    @TableField("status")
    private Integer status;

    /**
     * 支付方式，对应字典表param_type = 306
     */
    @TableField("pay_model")
    private Integer payModel;

    /**
     * 指导总价
     */
    @TableField("total_offer")
    private BigDecimal totalOffer;

    /**
     * 成交总价
     */
    @TableField("total_price")
    private BigDecimal totalPrice;

    /**
     * 折扣，百分比
     */
    @TableField("discount")
    private Integer discount;

    /**
     * 总成本价格
     */
    @TableField("total_cost_price")
    private BigDecimal totalCostPrice;

    /**
     * 产品成本价格
     */
    @TableField("goods_cost_price")
    private BigDecimal goodsCostPrice;

    /**
     * 其他成本价格
     */
    @TableField("other_cost_price")
    private BigDecimal otherCostPrice;

    /**
     * 实际成交时间
     */
    @TableField("real_trading_time")
    private Date realTradingTime;

    /**
     * 是否提交
     */
    @TableField("commit")
    private Boolean commit;

    /**
     * 行政区划编码
     */
    @TableField("area_code")
    private String areaCode;

    /**
     * 是否删除 false-没删除,true-已删除
     */
    @TableField("deleted")
    private boolean deleted;

    /**
     * 创建人id
     */
    @TableField("gmt_create_id")
    private Long gmtCreateId;

    /**
     * 创建时间
     */
    @TableField("gmt_create")
    private Date gmtCreate;

    /**
     * 修改人id
     */
    @TableField("gmt_modified_id")
    private Long gmtModifiedId;

    /**
     * 修改时间
     */
    @TableField("gmt_modified")
    private Date gmtModified;

    /**
     * 订单派单状态 1-已派单 null/0-未派单
     */
    @TableField("distribute_status")
    private Integer distributeStatus;

    /**
     * 商城订单id
     */
    @TableField("mall_order_id")
    private String mallOrderId;

    /**
     * 数据来源
     */
    @TableField("data_source")
    private String dataSource;


    public SaleOrderInfo changeOrderStatus(Integer status, Long operateUserId, Date operateDate) {
        this.setStatus(status);
        this.setGmtModified(operateDate);
        this.setGmtModifiedId(operateUserId);
        if (SaleOrderStatusEnum.PAID_SUCCESS.getKey().equals(status)) {
            this.setRealTradingTime(operateDate);
        }
        return this;
    }

}
